package com.home_school_platform.service.impl.login;

import com.home_school_platform.dao.ParentDao;
import com.home_school_platform.dao.StudentDao;
import com.home_school_platform.entity.pojo.Parent;
import com.home_school_platform.entity.pojo.Student;
import com.home_school_platform.result.Result;
import com.home_school_platform.service.login.ParentLoginService;
import com.home_school_platform.util.JwtUtils;
import com.home_school_platform.util.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 家长登录服务实现类
 * @authoor Bilysen
 * @date 2021/3/14 - 14:33
 **/
@Service
public class ParentLoginServiceImpl implements ParentLoginService {

    @Autowired
    private StudentDao studentDao;
    
    @Autowired
    private ParentDao parentDao;

    //默认初始密码
    private final static String InitialPassword = "123456";

    /**
     *家长使用账号登录
     * @param parentPhone 家长手机号即是家长的账号
     * @param password 前端传到后端的密码
     * @return result
     */
    @Override
    public Result checkPhoneLogin(String parentPhone, String password) {
        //创建一个标志，默认是false表示验证失败，true表示验证成功
        boolean flag = false;

        //从数据库中调用方法，返回一个列表,判断家长手机号是否存在
        List<Student> students = studentDao.getStudentByParentPhone(parentPhone);

        //使用map向controller传数据
        HashMap<String, Object> map = new HashMap<>();

        //返回结果封装类
        Result result = new Result();

        //判断列表是否为空
        if(students.isEmpty()){
            //1.列表为空表示数据库中没有此账号
            map.put("flag",flag); //返回false,表示验证失败
            result.setData(map);
            result.setCode(Result.NULL); // 返回400
            result.setMassage("账号输入错误"); //放回错误提示信息
        }else{
            //2.账号没有错误

            //通过查看家长表中是否有这个用户来判断这是第几次登录
            Parent parent = parentDao.getParentByPhone(parentPhone);
            if(parent!=null){
                //不是第一次登录(此时数据库密码已经是md5加密了)
                if(MD5Utils.textToMd5(password).equals(parent.getPassword())){
                    //密码验证正确
                    flag = true;
                    map.put("flag",flag); //返回true,表示验证成功
                    map.put("token",JwtUtils.getToken(parentPhone)); //返回给前端以家长手机号生成的jwt
                    result.setData(map);
                    result.setCode(Result.OK);
                    result.setMassage("登录成功");
                }else{
                    map.put("flag",flag);
                    result.setData(map);
                    result.setCode(Result.NULL); // 返回400
                    result.setMassage("密码输入错误"); //放回错误提示信息
                }
            }else{
                //第一次登录
                if(password.equals(InitialPassword)){
                    //将手机号和密码存入家长表中
                    Parent newParent = new Parent();
                    newParent.setPhone(parentPhone);
                    newParent.setPassword(MD5Utils.textToMd5(password)); //密码进行加密
                    newParent.setGzhOpenid(null);
                    newParent.setXcxOpenid(null);
                    Integer i = parentDao.insertParent(newParent);
                    System.out.println("已经家长加入家长表："+i);

                    //将学生表这一栏改为启用
                    for (Student student : students) {
                        student.setState("启用");
                        studentDao.updateStudentById(student);
                    }

                    flag = true;
                    map.put("flag",flag);
                    map.put("token",JwtUtils.getToken(parentPhone));
                    result.setData(map);
                    result.setCode(Result.OK);
                    result.setMassage("登录成功");
                }else {
                    map.put("flag",flag);
                    result.setData(map);
                    result.setCode(Result.NULL); // 返回400
                    result.setMassage("密码输入错误"); //放回错误提示信息
                }
            }
        }
        return result;
    }

    /**
     * 家长使用微信登录
     * @param openId 前端传的微信openid
     * @return result
     */
    @Override
    public Result checkWeChatLogin(String openId) {
        //创建一个标志，默认是false表示验证失败，true表示验证成功
        boolean flag = false;

        //根据传入的openid来判断是否有这个家长(数据库的openid已经md5加密)
        Parent parent = parentDao.getParentByXcxOpenid(MD5Utils.textToMd5(openId));

        //使用map向controller传数据
        HashMap<String, Object> map = new HashMap<>();

        //返回结果封装类
        Result result = new Result();

        if(parent != null){
            flag = true;
            map.put("flag",flag); //返回true,表示验证成功
            map.put("token",JwtUtils.getToken(parent.getPhone())); //返回给前端以家长手机号生成的jwt
            result.setData(map);
            result.setCode(Result.OK);
            result.setMassage("登录成功");
        }else{
            map.put("flag",flag);
            result.setData(map);
            result.setCode(Result.NULL); // 返回400
            result.setMassage("未绑定微信"); //放回错误提示信息
        }
        return result;
    }


}
